/**
 * 
 */
package sourceFiles;

import java.util.HashMap;

import Exceptions.InvalidAgeParam;
import Exceptions.InvalidCapacity;
import Exceptions.InvalidHeightParam;
import Exceptions.InvalidRideId;
import Exceptions.InvalidRideName;
import Exceptions.XMLRidesParserException;
import Exceptions.CentralComputerExceptions.RideIDDoesntExist;

/**
 * This is an interface to the Supervisor station
 * 
 * @author LASO_Team
 * 
 */
public interface ISupervisorStation {

	/**
	 * Receives the parameters from the user and creates a ride accordingly.
	 * 
	 * @param rideName
	 *            the name that the supervisor gives to the ride.
	 * @param isExtreme
	 *            the boolean value which determines whether the ride is extreme
	 *            or not.
	 * @param maxCapacity
	 *            the maximal value of users that are allowed in the ride.
	 * @param minAge
	 *            the minimal age of a child that wishes to enter the ride.
	 * @param minHeight
	 *            the minimal height of a child that wishes to enter the ride.
	 * @return
	 * @throws InvalidRideName
	 *             - if the string given as the ride's name is illegal.
	 * @throws InvalidCapacity
	 *             - if the ride's capacity given is less than 1.
	 * @throws XMLRidesParserException
	 *             if the XML file is invalid
	 * @throws InvalidAge
	 *             - if the minimal age given is less than 1.
	 * @throws InvalidHeight
	 *             - if the minimal height given is less than 1.
	 * @return the ID of the ride that was created.
	 */

	public Integer createNewRide(String rideName, Boolean isExtreme,
			Integer maxCapacity, Integer minAge, Integer minHeight)
			throws InvalidRideName, InvalidCapacity, InvalidAgeParam,
			InvalidHeightParam, XMLRidesParserException;

	/**
	 * Receives the parameters from the user and alters the ride parameters
	 * accordingly.
	 * 
	 * @param rideID
	 *            the id of the ride we wish to edit.
	 * @param maxCapacity
	 *            the new maximal value of users that are allowed in the ride.
	 * @param minAge
	 *            the new minimal age of a child that wishes to enter the ride.
	 * @param minHeight
	 *            the new minimal height of a child that wishes to enter the
	 *            ride.
	 * @throws InvalidRideId
	 *             - if the ride id given is less than 1.
	 * @throws InvalidCapacity
	 *             - if the ride's capacity given is less than 1.
	 * @throws RideIDDoesntExist
	 *             if the ID is legal but the ID isn't registered to th system.
	 * @throws XMLRidesParserException
	 *             if there was a problom whide working on the XML file.
	 * @throws InvalidAge
	 *             - if the minimal age given is less than 1.
	 * @throws InvalidHeight
	 *             - if the minimal height given is less than 1.
	 */
	public void editRideParams(Integer rideID, Integer maxCapacity,
			Integer minAge, Integer minHeight) throws InvalidRideId,
			InvalidCapacity, InvalidAgeParam, InvalidHeightParam,
			RideIDDoesntExist, XMLRidesParserException;

	/**
	 * @return the statistics of the purchases in the park
	 */
	public HashMap<Integer, Integer> getTicketsAmount();
}
